package cmdline

import (
	"bufio"
	"fmt"
	"os"
	"strings"
)

type cmdFunc func(param ...string) string

var CmdLineMap = map[string]cmdFunc{}

func RegCmdLineFunc(cmdKey string, fun cmdFunc) {
	_, ok := CmdLineMap[cmdKey]
	if ok {
		fmt.Printf("重复注册回调函数 cmd： %v", cmdKey)
	} else {
		CmdLineMap[cmdKey] = fun
	}
}
func GetCmdFunc(cmdKey string) cmdFunc {
	cb, ok := CmdLineMap[cmdKey]
	if !ok {
		fmt.Printf("找不到注冊的 cmd回調函数： %v", cmdKey)
		return nil
	} else {
		return cb
	}
}
func InitCmsLine() {
	// 创建一个用于读取标准输入的 Reader
	reader := bufio.NewReader(os.Stdin)

	fmt.Println("请输入内容(exit退出):")

	// 循环读取输入，直到遇到换行符为止
	for {
		// 读取输入的一行数据，包括换行符
		input, err := reader.ReadString('\n')
		if err != nil {
			fmt.Println("读取输入时发生错误:", err)
			return
		}

		// 去除输入字符串中的换行符
		input = input[:len(input)-1]

		newStr := strings.Replace(input, "    ", " ", -1)
		newStr = strings.Replace(newStr, "   ", " ", -1)
		newStr = strings.Replace(newStr, "  ", " ", -1)
		newStr = strings.Replace(newStr, "\r", "", -1)
		newStr = strings.Replace(newStr, "\n", "", -1)

		// 判断输入是否为空行，如果是则退出循环
		if input == "exit" {
			break
		}
		// 使用逗号作为分割符分割字符串
		parts := strings.Split(newStr, " ")
		if len(parts) <= 0 {
			fmt.Printf("你输入的内容是:%v 没有参数\n", input)
			continue
		}
		if parts[0] == "" {
			fmt.Printf("你输入的内容是:%v 没有cmd\n", input)
			continue
		}
		fun := GetCmdFunc(parts[0])
		if nil == fun {
			fmt.Printf("你输入的内容是:%v 找不到cmd函数\n", input)
			continue
		}
		if len(parts) == 1 {
			fun("")
		} else {
			fun(parts[1:]...)
		}
	}

	fmt.Println("程序结束")
}
